/*
 * CanvasSenha.java
 *
 * Criado em 10 de Setembro de 2007, 09:21
 */

package codebreaker.cliente.jogo.gui;

import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

/**
 *
 * @author rodrigo
 */
public class CanvasSenha extends Canvas implements MouseListener {
    
    public static final int DIGITOS = 9;
    public static final int SIZE = 32;
    
    public static Image[] digitos;
    private byte[] senha;
    
    public CanvasSenha() {
	this(true);
    }
    
    /**
     * Cria uma nova instância de CanvasSenha
     */
    public CanvasSenha(boolean editavel) {
	senha = new byte[4];
	senha[0] = 0;
	senha[1] = 1;
	senha[2] = 2;
	senha[3] = 3;
	
	if (digitos == null) {
	    digitos = new Image[DIGITOS];
	    for (int c = 0; c < DIGITOS; c++)
		digitos[c] = Toolkit.getDefaultToolkit().createImage("img/c" + Integer.toString(c+1) + ".png");
	}
	
	if (editavel)
	    this.addMouseListener(this);
    }
    
    public void paint(Graphics g) {
	
	g.setColor(Color.WHITE);
	g.fillRect(0,0,SIZE*4,SIZE);
	
	if (senha != null)
	    for (int c = 0; c < 4; c++)
		g.drawImage(digitos[senha[c]], c*SIZE, 1, this);
    }
    
    public byte[] getSenha() {
	return senha;
    }
    
    public void mouseClicked(MouseEvent e) {
	/* descobre sobre qual item clicou */
	int item = e.getX()/SIZE;
	
	if (item >= 0 && item < 4) {
	    
	    boolean existeIgual;
	    do {
		if (e.getButton() == MouseEvent.BUTTON1)
		    senha[item] = (byte)((senha[item] + 1) % DIGITOS);
		else if (e.getButton() == MouseEvent.BUTTON3)
		    senha[item] = (byte)((senha[item] + DIGITOS - 1) % DIGITOS);
		
		existeIgual = false;
		for (int c = 0; c < 4; c++)
		    if (c != item && senha[c] == senha[item]) {
		    existeIgual = true;
		    break;
		    }
	    }
	    while (existeIgual);
	    
	    this.repaint();
	}
    }
    
    public void mousePressed(MouseEvent e) {
    }
    
    public void mouseReleased(MouseEvent e) {
    }
    
    public void mouseEntered(MouseEvent e) {
    }
    
    public void mouseExited(MouseEvent e) {
    }
    
    public void setSenha(byte[] senha) {
	this.senha = senha;
	this.repaint();
    }
    
}
